001 /* EVolve - an Extensible Software Visualization Framework 002 * Copyright (C) 2001-2002 Qin Wang 003 * 004 * This library is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU Library General Public 006 * License as published by the Free Software Foundation; either 007 * version 2 of the License, or (at your option) any later version. 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Library General Public License for more details. 013 * 014 * You should have received a copy of the GNU Library General Public 015 * License along with this library; if not, write to the 016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 017 * Boston, MA 02111-1307, USA. 018 */ 019 020 /* 021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/ 022 */ 023 024 package EVolve.visualization; 025 026 import EVolve.util.predefinedutils.VizInfo; 027 import EVolve.data.*; 028 import EVolve.visualization.VizFactory.VisualizationFactory; 029 import EVolve.exceptions.VizInfoCreateException; 030 import EVolve.Scene; 031 import java.awt.*; 032 import java.util.HashMap; 033 import javax.swing.*; 034 035 /** 036 * Two-column table. 037 */ 038 public class TableViz extends Visualization { 039 private ReferenceDimension leftColumn; // dimension, left column 040 private ValueDimension rightColumn; // dimension, right column 041 042 private JTable table; // the table 043 private TableVizModel model; // table model 044 045 private int[] value; // value of the right column 046 047 /** 048 * Creates a table. 049 */ 050 public TableViz() { 051 model = new TableVizModel(); 052 table = new JTable(model); 053 054 JScrollPane scrollPane = new JScrollPane(table); 055 scrollPane.setBackground(Color.white); 056 scrollPane.getViewport().setBackground(Color.white); 057 ((JPanel)panel).add(scrollPane, BorderLayout.CENTER); 058 059 addPopupTrigger(table); 060 addPopupTrigger(scrollPane.getViewport()); 061 } 062 063 public Dimension[] createDimension() { 064 leftColumn = new ReferenceDimension(); 065 rightColumn = new ValueDimension(); 066 067 Dimension[] returnVal = new Dimension[2]; 068 returnVal[0] = leftColumn; 069 returnVal[1] = rightColumn; 070 071 return returnVal; 072 } 073 074 protected Component createPanel() { 075 JPanel returnVal = new JPanel(new BorderLayout()); 076 returnVal.setBackground(Color.white); 077 return returnVal; 078 } 079 080 protected JPanel createConfigurationPanel() { 081 return null; 082 } 083 084 protected void updateConfiguration() { 085 model = new TableVizModel(); 086 model.setName(leftColumn.getName(), rightColumn.getName()); 087 table.setModel(model); 088 } 089 090 public void preVisualize() { 091 value = new int[leftColumn.getMaxEntityNumber()]; 092 for (int i = 0; i < value.length; i++) { 093 value[i] = 0; 094 } 095 } 096 097 public void receiveElement(Element element) { 098 if (element.isOptional()) return; 099 100 value[(int)leftColumn.getField(element)] += rightColumn.getField(element); 101 } 102 103 public void visualize() { 104 leftColumn.addComparator(new ValueComparator("Value", false, value, leftColumn.getEntityName2IntMap())); 105 sort(); 106 } 107 108 public void sort() { 109 String[] sortedName = new String[leftColumn.getEntityNumber()]; 110 int[] sortedValue = new int[leftColumn.getEntityNumber()]; 111 112 for (int i = 0; i < leftColumn.getMaxEntityNumber(); i++) { 113 int sortedIndex = leftColumn.getSortedIndex(i); 114 if (sortedIndex != -1) { 115 sortedName[sortedIndex] = leftColumn.getEntity(sortedIndex).getName(); 116 sortedValue[sortedIndex] = value[i]; 117 } 118 } 119 120 model = new TableVizModel(); 121 model.setName(leftColumn.getName(), rightColumn.getName()); 122 model.setValue(sortedName, sortedValue); 123 table.setModel(model); 124 } 125 126 public void makeSelection() { 127 leftColumn.makeSelection(subjectDefinition.getType(),table.getSelectedRows()); 128 } 129 130 public HashMap getCurrentConfigure() { 131 try { 132 HashMap configure = super.getCurrentConfigure(); 133 134 VizInfo vizInfo = new VizInfo(); 135 136 vizInfo.setFactory((VisualizationFactory)configure.get("Factory")); 137 vizInfo.setSubject((ElementDefinition)configure.get("Subject")); 138 String[] dimensionDefs = new String[2]; 139 dimensionDefs[0] = leftColumn.getName() ; 140 dimensionDefs[1] = rightColumn.getName() ; 141 configure.put("Dimension",vizInfo.createDimension(dimensionDefs)); 142 143 144 return configure; 145 } catch (VizInfoCreateException e) { 146 Scene.showErrorMessage(e.getMessage()); 147 } 148 return null; 149 } 150 151 public ReferenceDimension getLinkableDimension(int dim) { 152 return null; 153 } 154 155 public AutoImage getImage() { 156 return null; 157 } 158 159 public long getxMax() { 160 return -1; 161 } 162 163 public void clearMagnifier() { 164 return; 165 } 166 167 public void setImage(AutoImage newImage) { 168 return; 169 } 170 171 public JMenuItem[] createSelectionMenuItem() { 172 return null; 173 } 174 175 public Object clone() { 176 TableViz o = (TableViz)super.clone(); 177 178 o.leftColumn = (ReferenceDimension)leftColumn.clone(); 179 o.rightColumn = (ValueDimension)rightColumn.clone(); 180 o.dimension[0] = o.leftColumn; 181 o.dimension[1] = o.rightColumn; 182 o.panelConfiguration = o.createConfigurationPanel(); 183 o.panel = new JPanel(new BorderLayout()); 184 o.panel.setBackground(Color.white); 185 o.createDialog(); 186 o.createMenu(); 187 188 if (value!=null) { 189 o.value = new int[value.length]; 190 for (int i=0; i<value.length; i++) 191 o.value[i] = value[i]; 192 } 193 194 o.model = (TableVizModel)model.clone(); 195 o.table = new JTable(o.model); 196 197 JScrollPane scrollPane = new JScrollPane(o.table); 198 scrollPane.setBackground(Color.white); 199 scrollPane.getViewport().setBackground(Color.white); 200 ((JPanel)o.panel).add(scrollPane, BorderLayout.CENTER); 201 202 o.addPopupTrigger(o.table); 203 o.addPopupTrigger(scrollPane.getViewport()); 204 return o; 205 } 206 }